package com.xnyzc.lhy.common.component.sms;

//腾讯短信

import com.github.qcloudsms.SmsMultiSender;
import com.github.qcloudsms.SmsMultiSenderResult;
import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import com.github.qcloudsms.httpclient.HTTPException;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

//import org.json.JSONException;

/**
 * <p>腾讯云短信推送 短信发送</p>
 *
 * @author haoyfa
 * @version v1.0
 * @since 2019、10、15
 */
@Slf4j
@Component
public class QCloudSMSUtils {
    private static int smsAppId;

    private static String smsAppKey;

    private static String smsSignature;

    private static String smsNationCode;

    @Value("${global.qcloud.sms.appId}")
    public void setSmsAppId(String appId) {
        smsAppId = Integer.parseInt(appId);
    }

    @Value("${global.qcloud.sms.appKey}")
    public void setSmsAppKey(String appKey) {
        smsAppKey = appKey;
    }

    @Value("${global.qcloud.sms.signature}")
    public void setSmsSignature(String signature) {
        smsSignature = signature;
    }

    @Value("${global.qcloud.sms.nationCode}")
    public void setNationCode(String nationCode) {
        smsNationCode = nationCode;
    }


    /**
     * 单条短信发送。
     * 使用QCloudSmsConstant获取短信模板，需要的参数按顺序放入msmData变量中
     *
     * @param phone    电话号码
     * @param template 腾讯短信模板
     * @param msmData  短信动态数据
     **/
//    public static void sendMessage(String phone, QCloudSmsTemplate template, JSONObject msmData) {
//        ArrayList<String> params = new ArrayList<String>();
//
//        // 转换参数格式
//        Set<String> keySet = msmData.keySet();
//        for (String key : keySet) {
//            params.add(msmData.getString(key));
//        }
//
//        sendMessage(phone, template, params);
//    }

    /**
     * 单条短信发送
     * 使用QCloudSmsConstant获取短信模板，需要的参数按顺序放入msmData变量中
     *
     * @param phone    电话号码
     * @param template 腾讯短信模板
     * @param params   模板参数
     */
//    public static void sendMessage(String phone, QCloudSmsTemplate template, ArrayList<String> params) {
//        SmsSingleSender sender = new SmsSingleSender(smsAppId, smsAppKey);
//        SmsSingleSenderResult result = null;
//
//        try {
//            result = sender.sendWithParam(smsNationCode, phone, template.getId(), params, smsSignature, "", "");
//        } catch (HTTPException e) {
//            log.error("{} 短信发送失败,内容:{}", phone, template.getContent());
//            throw PangException.create(EErrorCode.smsSendError);
//        } catch (JSONException e) {
//            log.error("{} 短信发送失败,内容:{}", phone, template.getContent());
//            throw PangException.create(EErrorCode.smsSendError);
//        } catch (IOException e) {
//            log.error("{} 短信发送失败,内容:{}", phone, template.getContent());
//            throw PangException.create(EErrorCode.smsSendError);
//        }
//
//        // 解析结果
//        if (result == null
//                || result.result != 0) {
//            throw PangException.create(EErrorCode.smsSendError);
//        }
//    }

    /**
     * 腾讯-批量短信发送
     * 使用QCloudSmsConstant获取短信模板，需要的参数按顺序放入params变量中
     *
     * @param phoneList 电话号码
     * @param template  腾讯短信模板
     * @param msmData   短信动态数据
     **/
//    public static SubMailResult sendMultiMessage(List<String> phoneList, QCloudSmsTemplate template, JSONObject msmData) {
//        ArrayList<String> params = new ArrayList<String>();
//
//        // 数据转换
//        Set<String> keySet = msmData.keySet();
//        for (String key : keySet) {
//            params.add(msmData.getString(key));
//        }
//
//        // 数据转换
//        ArrayList<String> phoneArrayList = new ArrayList<String>(phoneList.size());
//        for (String phone : phoneList) {
//            phoneArrayList.add(phone);
//        }
//
//        return sendMultiMessage(phoneArrayList, template, params);
//    }

    /**
     * 腾讯-批量短信发送
     * 使用QCloudSmsConstant获取短信模板，需要的参数按顺序放入params变量中
     *
     * @param phoneList 电话号码
     * @param template  腾讯短信模板
     * @param params    模板参数
     **/
//    public static SubMailResult sendMultiMessage(ArrayList<String> phoneList, QCloudSmsTemplate template, ArrayList<String> params) {
//        //检查短信是否为空
//        if (CheckUtil.collectionIsEmpty(phoneList)) {
//            throw new PangException(EErrorCode.missingArg);
//        }
//
//        SmsMultiSender multiSender = new SmsMultiSender(smsAppId, smsAppKey);
//        SmsMultiSenderResult result = null;
//
//        // 发送短信
//        try {
//            result = multiSender.sendWithParam(smsNationCode, phoneList, template.getId(), params, smsSignature, "", "");
//        } catch (HTTPException e) {
//            log.error("短信发送失败,内容:{}", template.getContent());
//            throw PangException.create(EErrorCode.smsSendError);
//        } catch (JSONException e) {
//            log.error("短信发送失败,内容:{}", template.getContent());
//            throw PangException.create(EErrorCode.smsSendError);
//        } catch (IOException e) {
//            log.error("短信发送失败,内容:{}", template.getContent());
//            throw PangException.create(EErrorCode.smsSendError);
//        }
//
//        // 解析结果
//        JSONArray resultJson = JSONArray.fromObject(result);
//
//        // 筛选成功发送短信的手机号
//        List<String> phoneSuccessList = new ArrayList<>();
//        if (result != null
//                && result.result == 0
//                && result.details != null
//                && result.details.size() > 0) {
//            for (int i = 0; i < result.details.size(); i++) {
//                if (result.details.get(i).result == 0) {
//                    phoneSuccessList.add(result.details.get(i).mobile);
//                }
//            }
//        } else {
//            throw PangException.create(EErrorCode.smsSendError);
//        }
//
//        // 筛选发送失败的手机号
//        phoneList.removeAll(phoneSuccessList);
//
//        SubMailResult subMailResult = new SubMailResult();
//        if (CheckUtil.objIsEmpty(phoneList)) {
//            subMailResult.setStatus(true);
//        } else {
//            subMailResult.setStatus(false);
//            subMailResult.setPhoneList(phoneList);
//        }
//
//        return subMailResult;
//    }
}
